using System;

struct Vec2
{
    public float x,y;

    public Vec2(float x, float y)
    {
        this.x=x;
        this.y=y;
    }
    public static Vec2 operator +(Vec2 v1, Vec2 v2)
    {
        return new Vec2(v1.x+v2.x, v1.y+v2.y);
    }
        public static Vec2 operator -(Vec2 v1, Vec2 v2)
    {
        return new Vec2(v1.x-v2.x, v1.y-v2.y);
    }
}

struct Vec3
{
    public float x,y,z;

    public Vec3(float x, float y, float z)
    {
        this.x=x;
        this.y=y;
        this.z=z;
    }
    
    public static Vec3 operator +(Vec3 v1, Vec3 v2)
    {
        return new Vec3(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z);
    }
    
    public static Vec3 operator -(Vec3 v1, Vec3 v2)
    {
        return new Vec3(v1.x-v2.x, v1.y-v2.y ,v1.z-v2.z);
    }
    
};

struct Vec4
{
    public float x,y,z,w;

    public Vec4(float x, float y, float z, float w)
    {
        this.x=x;
        this.y=y;
        this.z=z;
        this.w=w;
        
    }
        public static Vec4 operator +(Vec4 v1, Vec4 v2)
    {
        return new Vec4(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z, v1.w+v2.w);
    }
    
    public static Vec4 operator -(Vec4 v1, Vec4 v2)
    {
        return new Vec4(v1.x-v2.x, v1.y-v2.y ,v1.z-v2.z, v1.w-v2.w);
    }
}

